| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 | using UnityEngine;using Random = UnityEngine.Random;namespace Dustyroom {public class FloatingMotion : MonoBehaviour {    public float verticalAmplitude = 1.0f;    public float horizontalAmplitude = 0.0f;    [Space]    public float speed = 1.0f;    [Space, Tooltip("In seconds")]    public float startDelay = 0;    [Space]    public bool worldSpace = false;    private Vector3 initialPosition;    private float offsetH = 0f;    private float offsetV = 0f;    private bool isMoving = false;    void Start() {        Invoke("Initialize", startDelay);    }    private void Initialize() {        initialPosition = worldSpace ? transform.position : transform.localPosition;        offsetH = Random.value * 1000f;        offsetV = Random.value * 1000f;        isMoving = true;    }    void Update() {        if (!isMoving) {            return;        }        var hDirection = new Vector3(Mathf.Sin(Time.timeSinceLevelLoad * speed * 0.5f + offsetV + 100f), 0f,                                     Mathf.Cos(Time.timeSinceLevelLoad * speed + offsetV + 100f));        Vector3 offset = Vector3.up * Mathf.Sin(Time.timeSinceLevelLoad * speed + offsetH) * verticalAmplitude +                         hDirection * Mathf.Sin(Time.timeSinceLevelLoad * speed + offsetV) * horizontalAmplitude;        Vector3 position = initialPosition + offset * Time.timeScale;        if (worldSpace) {            transform.position = position;        } else {            transform.localPosition = position;        }    }}}
 |